跳至主要内容

SQL I

SQL I 資料庫


i think you have gotten know what is that in vacational high school​

HAHA but ...let,s review it​

All right What is SQL​

Structure Query Language

是一種特定目的程式語言,用於管理關聯式資料庫管理系統(RDBMS),或在關係流資料管理系統(RDSMS)中進行流處理。 (當然還有另一種東西叫NoSQL) 指令參考

So in summary SQL used for DB(DataBase)​

DB(DataBase)​

broad sense: that mean the place where we store data narrow sense: DB is set of a group of common data

Application Example: phone contact(if we didn,t set up of our DB )


benefit of DB​

    1. Redundancy
    1. Consistency
    1. Data Sharing
    1. Data Indepence
    1. Integrity
    1. Reduce Paper
    1. Security

What are you waiting for Just Download​

SQlite Studio


Yah! introduce DB​

延伸閱讀 DT稍後介紹(先知道DB 有很多的DT)


DataTable​

資料庫的儲存方式長的很像Excel


橫看Row 直看Col


DataBase 結構​

Bit -> Byte -> Field -> Record -> Table -> Data Base 主要要知道

  1. 一個DB Server 可以有很多DataBase(資料庫)
  2. 一個DataBase 可以有很多 Datatable(資料表)
  3. 一個Datatable 可以有很多 Record(資料紀錄)
  4. 一個Record 可以有很多Field/Column(資料欄位)

DB VS DBMS​

DataBase vs DataBase Management System​

what DBMS is you know?


Download Example​

Example連結

開啟SQLite Studio 並且匯入這個SQL檔案


You will see Database name and what datatables it involve​


傳說中資料庫有四種基礎命令​

也就是SUID Select Update Insert Delete 選擇 更新 插入 刪除 概念跟CRUD一樣


Select 查詢​

SELECT * FROM `Class`;

"* 為所謂的萬用字元 也就是全部的意思" 那語法總得來說就是

SELECT * FROM `資料表`;

當然我們也可以不一定要Show出全部的Columns(欄位) 也能一次抓多欄/單欄

SELECT (`Class_name`) FROM `Class`; --單欄 Class_name
SELECT (`Class_name`,`Class_id`) FROM `Class`; --多欄 Class_id

稍微進階的查詢Query我們可以像程式語言一樣加入查詢條件,但...


不是If 是Where 來個範例吧

SELECT * FROM `Class` WHERE `Class_name` = "四資管二A";

你會發現語法是WHERE [condition]


Insert 插入​

INSERT INTO `Class` (`Class_name`,`Class_id`) VALUES ("四企管二A","4");
INSERT INTO `Class` VALUES ("四企管二A","4");--插入全欄位值 且Value插入順序正確可忽略欄位名稱
INSERT INTO `資料表` (`欄位1`,`欄位2`,...) VALUES ("Value1","Value2",...);

做完之後 Class 資料表就多了一個 四企管二A了


Update 更新​

UPDATE `Class` SET `Class_name`="四企管二Z"  WHERE `Class_name` = "四企管二A";
UPDATE `資料表` SET `欄位名稱1`=`欄位值1`,`欄位名稱2`=`欄位值2`... [WHERE {條件式}]

四企管二A 變成 四企管二Z 了XD


Delete 刪除​

DELETE FROM `Class` WHERE `Class_name`="四企管二Z";
DELETE FROM `資料表` WHERE 條件式;

企管88


玩了這麼多 我提供的資料庫是時候自己創建了​


Create 創建資料表\資料庫​

還記得這張圖嗎 所以我們必須把最外層的DB建立起來

CREATE DATABASE [database_name];

同樣 建立一張DT

CREATE DATATABLE [datatable_name](
col1 datatype,
col2 datatype,
col3 datatype,
);
--======
CREATE TABLE customers (
C_Id INT,
Name varchar(50),
Address varchar(255),
Phone varchar(20)
);

ALTER 修改資料表​

增加欄位​

ALTER TABLE table_name ADD column_name datatype;
更改資料欄位型別(沒錯ALTER 再ALTER)​
ALTER TABLE table_name ALTER COLUMN column_name datatype;
刪除欄位 (DROP COLUMN)​
ALTER TABLE table_name DROP COLUMN column_name;

DROP 刪除資料表​

刪除資料表 (DROP TABLE)​

完全刪除整個資料表。

DROP TABLE table_name;​

僅刪除資料表內容,但保留結構 (TRUNCATE TABLE)

TRUNCATE TABLE table_name;

資料表還在,只是資料清空了。

刪除資料庫 (DROP DATABASE)​
DROP DATABASE database_name;

蝦 指令超多? 這只是皮毛 接下來講講限制​

資料庫限制 SQL Consraints 有六個類別 通常是拿來限制 欄位可/不可 更動或新增的條件

  1. NOT NULL 非空值限制
  2. UNIQUE 唯一限制
  3. PRIMARY KEY 主鍵限制
  4. FOREIGN KEY 外鍵限制
  5. CHECK 檢查限制
  6. DEFAULT 預設值限制

情境 顧客資料表​

由於不能有顧客的編號(ID)為空值 我們會再設計DT的時候添加 NOT NULL

CREATE TABLE customer (
C_Id INT NOT NULL,
Name VARCHAR(50) NOT NULL,
Address VARCHAR(255),
Phone VARCHAR(20)
);

承上題情境​

由於顧客編號(ID)不能有重複的 為了避免衝突 我們也可以加入UNIQUE

CREATE TABLE customer (
C_Id INT NOT NULL UNIQUE,
Name VARCHAR(50) NOT NULL,
Address VARCHAR(255),
Phone VARCHAR(20)
);
--OR
CREATE TABLE customer (
C_Id INT NOT NULL,
Name VARCHAR(50) NOT NULL,
Address VARCHAR(255),
Phone VARCHAR(20),
UNIQUE (C_Id)
);

關聯(Relation)​


指令變化​

資料庫有很多廠商 基本上都遵循ISO的SQL標準但是各家的指令與語法還是會有差別(每個DB怎麼操作 有時候需要特別去查)


雖然SQL指令百百種 但是...​

師父領進門修行靠個人

Link


希望各位都理解拉​